home *** CD-ROM | disk | FTP | other *** search
/ Games of Daze / Infomagic - Games of Daze (Summer 1995) (Disc 1 of 2).iso / x2ftp / msdos / libs / hobbes3 / circles.c < prev    next >
Encoding:
C/C++ Source or Header  |  1992-08-17  |  5.1 KB  |  272 lines

  1. #include "hobbes.h"
  2.  
  3.  
  4. void CirclePoints(int, int, int, int, COLOR);
  5. void CirclePointsClip(int, int, int, int, COLOR);
  6. void CirclePointsPattern(int, int, int, int, PATTERN);
  7. void CirclePointsPatternClip(int, int, int, int, PATTERN);
  8. void CirclePointsFillPattern(int, int, int, int, PATTERN);
  9. void CirclePointsFillPatternClip(int, int, int, int, PATTERN);
  10.  
  11. void CirclePoints(int x, int y, int cx, int cy, COLOR c) {
  12.     Pixel(cx+x,cy+y,c);
  13.     Pixel(cx+y,cy+x,c);
  14.     Pixel(cx+y,cy+-x,c);
  15.     Pixel(cx+x,cy+-y,c);
  16.     Pixel(cx+-x,cy+-y,c);
  17.     Pixel(cx+-y,cy+-x,c);
  18.     Pixel(cx+-y,cy+x,c);
  19.     Pixel(cx+-x,cy+y,c);
  20. }
  21.  
  22. void CirclePointsClip(int x, int y, int cx, int cy, COLOR c) {
  23.     PixelClip(cx+x,cy+y,c);
  24.     PixelClip(cx+y,cy+x,c);
  25.     PixelClip(cx+y,cy+-x,c);
  26.     PixelClip(cx+x,cy+-y,c);
  27.     PixelClip(cx+-x,cy+-y,c);
  28.     PixelClip(cx+-y,cy+-x,c);
  29.     PixelClip(cx+-y,cy+x,c);
  30.     PixelClip(cx+-x,cy+y,c);
  31. }
  32.  
  33. void CirclePointsPattern(int x, int y, int cx, int cy, PATTERN p) {
  34.     int cxx=cx+x;
  35.     int cxy=cx+y;
  36.     int _cxx=cx-x;
  37.     int _cxy=cx-y;
  38.     int cyy=cy+y;
  39.     int cyx=cy+x;
  40.     int _cyy=cy-y;
  41.     int _cyx=cy-x;
  42.  
  43.     PixelPattern(cxx,cyy,p);
  44.     PixelPattern(cxy,cyx,p);
  45.     PixelPattern(cxy,_cyx,p);
  46.     PixelPattern(cxx,_cyy,p);
  47.     PixelPattern(_cxx,_cyy,p);
  48.     PixelPattern(_cxy,_cyx,p);
  49.     PixelPattern(_cxy,cyx,p);
  50.     PixelPattern(_cxx,cyy,p);
  51. }
  52.  
  53. void CirclePointsPatternClip(int x, int y, int cx, int cy, PATTERN p) {
  54.     int cxx=cx+x;
  55.     int cxy=cx+y;
  56.     int _cxx=cx-x;
  57.     int _cxy=cx-y;
  58.     int cyy=cy+y;
  59.     int cyx=cy+x;
  60.     int _cyy=cy-y;
  61.     int _cyx=cy-x;
  62.  
  63.     PixelPatternClip(cxx,cyy,p);
  64.     PixelPatternClip(cxy,cyx,p);
  65.     PixelPatternClip(cxy,_cyx,p);
  66.     PixelPatternClip(cxx,_cyy,p);
  67.     PixelPatternClip(_cxx,_cyy,p);
  68.     PixelPatternClip(_cxy,_cyx,p);
  69.     PixelPatternClip(_cxy,cyx,p);
  70.     PixelPatternClip(_cxx,cyy,p);
  71. }
  72.  
  73. void CirclePointsFillPattern(int x, int y, int cx, int cy, PATTERN p) {
  74.     HLinePattern(cx-x,cx+x,cy+y,p);
  75.     HLinePattern(cx-y,cx+y,cy+x,p);
  76.     HLinePattern(cx-y,cx+y,cy-x,p);
  77.     HLinePattern(cx-x,cx+x,cy-y,p);
  78. }
  79.  
  80. void CirclePointsFillPatternClip(int x, int y, int cx, int cy, PATTERN p) {
  81.     HLinePatternClip(cx-x,cx+x,cy+y,p);
  82.     HLinePatternClip(cx-y,cx+y,cy+x,p);
  83.     HLinePatternClip(cx-y,cx+y,cy-x,p);
  84.     HLinePatternClip(cx-x,cx+x,cy-y,p);
  85. }
  86.  
  87.  
  88.  
  89. void Circle(int centerx, int centery, int radius, COLOR c) {
  90.  
  91.     int x, y,
  92.         d, deltaE, deltaSE;
  93.  
  94.     x = 0;
  95.     y = radius;
  96.     d = 1-radius;
  97.     deltaE = 3;
  98.     deltaSE = -2*radius + 5;
  99.     CirclePoints(x, y, centerx, centery, c);
  100.  
  101.     while (y > x) {
  102.         if (d<0) {
  103.             d += deltaE;
  104.             deltaE += 2;
  105.             deltaSE += 2;
  106.             x++;
  107.             }
  108.           else {
  109.             d += deltaSE;
  110.             deltaE += 2;
  111.             deltaSE += 4;
  112.             x++;
  113.             y--;
  114.         }
  115.         CirclePoints(x, y, centerx, centery, c);
  116.     }
  117. }
  118.  
  119.  
  120. void CircleClip(int centerx, int centery, int radius, COLOR c) {
  121.     int x, y,
  122.         d, deltaE, deltaSE;
  123.  
  124.     x = 0;
  125.     y = radius;
  126.     d = 1-radius;
  127.     deltaE = 3;
  128.     deltaSE = -2*radius + 5;
  129.     CirclePointsClip(x, y, centerx, centery, c);
  130.  
  131.     while (y > x) {
  132.         if (d<0) {
  133.             d += deltaE;
  134.             deltaE += 2;
  135.             deltaSE += 2;
  136.             x++;
  137.             }
  138.           else {
  139.             d += deltaSE;
  140.             deltaE += 2;
  141.             deltaSE += 4;
  142.             x++;
  143.             y--;
  144.         }
  145.         CirclePointsClip(x, y, centerx, centery, c);
  146.     }
  147. }
  148.  
  149.  
  150.  
  151. void CirclePattern(int centerx, int centery, int radius, PATTERN p) {
  152.  
  153.     int x, y,
  154.         d, deltaE, deltaSE;
  155.  
  156.     x = 0;
  157.     y = radius;
  158.     d = 1-radius;
  159.     deltaE = 3;
  160.     deltaSE = -2*radius + 5;
  161.     CirclePointsPattern(x, y, centerx, centery, p);
  162.  
  163.     while (y > x) {
  164.         if (d<0) {
  165.             d += deltaE;
  166.             deltaE += 2;
  167.             deltaSE += 2;
  168.             x++;
  169.             }
  170.           else {
  171.             d += deltaSE;
  172.             deltaE += 2;
  173.             deltaSE += 4;
  174.             x++;
  175.             y--;
  176.         }
  177.         CirclePointsPattern(x, y, centerx, centery, p);
  178.     }
  179. }
  180.  
  181. void CirclePatternClip(int centerx, int centery, int radius, PATTERN p) {
  182.     int x, y,
  183.         d, deltaE, deltaSE;
  184.  
  185.     x = 0;
  186.     y = radius;
  187.     d = 1-radius;
  188.     deltaE = 3;
  189.     deltaSE = -2*radius + 5;
  190.     CirclePointsPatternClip(x, y, centerx, centery, p);
  191.  
  192.     while (y > x) {
  193.         if (d<0) {
  194.             d += deltaE;
  195.             deltaE += 2;
  196.             deltaSE += 2;
  197.             x++;
  198.             }
  199.           else {
  200.             d += deltaSE;
  201.             deltaE += 2;
  202.             deltaSE += 4;
  203.             x++;
  204.             y--;
  205.         }
  206.         CirclePointsPatternClip(x, y, centerx, centery, p);
  207.     }
  208.  
  209. }
  210.  
  211. void CircleFillPattern(int centerx, int centery, int radius, PATTERN p) {
  212.     int x, y,
  213.         d, deltaE, deltaSE;
  214.  
  215.     x = 0;
  216.     y = radius;
  217.     d = 1-radius;
  218.     deltaE = 3;
  219.     deltaSE = -2*radius + 5;
  220.     CirclePointsFillPattern(x, y, centerx, centery, p);
  221.  
  222.     while (y > x) {
  223.         if (d<0) {
  224.             d += deltaE;
  225.             deltaE += 2;
  226.             deltaSE += 2;
  227.             x++;
  228.             }
  229.           else {
  230.             d += deltaSE;
  231.             deltaE += 2;
  232.             deltaSE += 4;
  233.             x++;
  234.             y--;
  235.         }
  236.         CirclePointsFillPattern(x, y, centerx, centery, p);
  237.     }
  238.  
  239. }
  240.  
  241. void CircleFillPatternClip(int centerx, int centery, int radius, PATTERN p) {
  242.     int x, y,
  243.         d, deltaE, deltaSE;
  244.  
  245.     x = 0;
  246.     y = radius;
  247.     d = 1-radius;
  248.     deltaE = 3;
  249.     deltaSE = -2*radius + 5;
  250.     CirclePointsFillPatternClip(x, y, centerx, centery, p);
  251.  
  252.     while (y > x) {
  253.         if (d<0) {
  254.             d += deltaE;
  255.             deltaE += 2;
  256.             deltaSE += 2;
  257.             x++;
  258.             }
  259.           else {
  260.             d += deltaSE;
  261.             deltaE += 2;
  262.             deltaSE += 4;
  263.             x++;
  264.             y--;
  265.         }
  266.         CirclePointsFillPatternClip(x, y, centerx, centery, p);
  267.     }
  268.  
  269. }
  270.  
  271.  
  272.